package com.jvm;

/**
 * ClassName:Demo02
 * Package:com.jvm
 * Description:
 *
 * @Author:helei
 * @Create:2024/9/9 - 10:36
 */
public class Demo02 {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();
        //字节 jvm初始化内存大小为系统内存的1/64
        System.out.println("运行时当前总内存：runtime.totalMemory() = " + runtime.totalMemory());
        System.out.println("runtime.totalMemory() = " + runtime.totalMemory() * 1.0 / 1024 / 1024 + " MB");

        //Metaspace jdk1.8以后的名称
        //打印内存分配信息 可以使用jvm的命令行参数(可以将堆栈大小信息打印到控制台)
        // -XX:+PrintGCDetails 在vm参数中添加 或者使用 -Xlog:gc*
        //  1、默认控制台打印的堆内存划分是G1 面试题问的不是G1对内存的划分
        //  2、可以修改内存的划分方式 使用jdk1.8及以前使用的 :在vm参数中添加 -XX:+UseParNewGC 不可用
        //  -XX:+UseParallelGC
        //  堆体系：分为堆(新生代[伊甸区、幸存者from区、幸存者to区] + 老年代) 和 方法区

        //查看内存的使用情况
        //8/32G jvm默认最大可以申请系统内存的1/4
        System.out.println("jvm最大可以申请的内存：runtime.maxMemory() = " + runtime.maxMemory() * 1.0 / 1024 / 1024 + " MB");
        System.out.println("运行时剩余的空闲的内存：runtime.freeMemory() = " + runtime.freeMemory() * 1.0 / 1024 / 1024 + " MB");

        //***重要 手动配置内存大小：Xms：jvm初始化堆内存大小 Xmx：jvm最大可申请的堆内存大小
        //vm参数配置：-Xms20m -Xmx30m 表示起始内存为20m 最大内存为30m
        //-Xlog:gc* -XX:+UseParallelGC -Xms20m -Xmx30m


    }
}
